#include "BulletDynamics/ConstraintSolver/btSolverBody.h"
#ifdef __cplusplus
extern "C" {
#endif
btSolverBody* bullet_NewbtSolverBody(){
	btSolverBody* wrap_out = new btSolverBody();
	return wrap_out;
}

void bullet_btSolverBody_applyImpulse(btSolverBody* c_this,btVector3* linearComponent,btVector3* angularComponent,double impulseMagnitude){
	btVector3 const& c_arg_linearComponent=(btVector3 const&)(*linearComponent);
	btVector3 const& c_arg_angularComponent=(btVector3 const&)(*angularComponent);
	btScalar const c_arg_impulseMagnitude=impulseMagnitude;
	c_this->applyImpulse(c_arg_linearComponent,c_arg_angularComponent,c_arg_impulseMagnitude);
}

void bullet_btSolverBody_getAngularVelocity(btSolverBody* c_this,btVector3* angVel){
	btVector3& c_arg_angVel=(btVector3&)(*angVel);
	c_this->getAngularVelocity(c_arg_angVel);
}

btVector3* bullet_btSolverBody_getDeltaAngularVelocity(btSolverBody* c_this){
	btVector3 const& c_out = c_this->getDeltaAngularVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_getDeltaLinearVelocity(btSolverBody* c_this){
	btVector3 const& c_out = c_this->getDeltaLinearVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_GetFieldOfM_angularFactor(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_angularFactor);
}

btVector3* bullet_btSolverBody_GetFieldOfM_angularVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_angularVelocity);
}

btVector3* bullet_btSolverBody_GetFieldOfM_deltaAngularVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_deltaAngularVelocity);
}

btVector3* bullet_btSolverBody_GetFieldOfM_deltaLinearVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_deltaLinearVelocity);
}

btVector3* bullet_btSolverBody_GetFieldOfM_externalForceImpulse(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_externalForceImpulse);
}

btVector3* bullet_btSolverBody_GetFieldOfM_externalTorqueImpulse(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_externalTorqueImpulse);
}

btVector3* bullet_btSolverBody_GetFieldOfM_invMass(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_invMass);
}

btVector3* bullet_btSolverBody_GetFieldOfM_linearFactor(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_linearFactor);
}

btVector3* bullet_btSolverBody_GetFieldOfM_linearVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_linearVelocity);
}

btVector3* bullet_btSolverBody_GetFieldOfM_pushVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_pushVelocity);
}

btVector3* bullet_btSolverBody_GetFieldOfM_turnVelocity(btSolverBody* c_this){
	return (btVector3*)(&c_this->m_turnVelocity);
}

btTransform* bullet_btSolverBody_GetFieldOfM_worldTransform(btSolverBody* c_this){
	return (btTransform*)(&c_this->m_worldTransform);
}

btVector3* bullet_btSolverBody_getPushVelocity(btSolverBody* c_this){
	btVector3 const& c_out = c_this->getPushVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_getTurnVelocity(btSolverBody* c_this){
	btVector3 const& c_out = c_this->getTurnVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btSolverBody_getVelocityInLocalPointNoDelta(btSolverBody* c_this,btVector3* rel_pos,btVector3* velocity){
	btVector3 const& c_arg_rel_pos=(btVector3 const&)(*rel_pos);
	btVector3& c_arg_velocity=(btVector3&)(*velocity);
	c_this->getVelocityInLocalPointNoDelta(c_arg_rel_pos,c_arg_velocity);
}

void bullet_btSolverBody_getVelocityInLocalPointObsolete(btSolverBody* c_this,btVector3* rel_pos,btVector3* velocity){
	btVector3 const& c_arg_rel_pos=(btVector3 const&)(*rel_pos);
	btVector3& c_arg_velocity=(btVector3&)(*velocity);
	c_this->getVelocityInLocalPointObsolete(c_arg_rel_pos,c_arg_velocity);
}

btTransform* bullet_btSolverBody_getWorldTransform(btSolverBody* c_this){
	btTransform const& c_out = c_this->getWorldTransform();
	btTransform* wrap_out = (btTransform*)(&c_out);
	return wrap_out;
}

void bullet_btSolverBody_internalApplyImpulse(btSolverBody* c_this,btVector3* linearComponent,btVector3* angularComponent,double impulseMagnitude){
	btVector3 const& c_arg_linearComponent=(btVector3 const&)(*linearComponent);
	btVector3 const& c_arg_angularComponent=(btVector3 const&)(*angularComponent);
	btScalar const c_arg_impulseMagnitude=impulseMagnitude;
	c_this->internalApplyImpulse(c_arg_linearComponent,c_arg_angularComponent,c_arg_impulseMagnitude);
}

void bullet_btSolverBody_internalApplyPushImpulse(btSolverBody* c_this,btVector3* linearComponent,btVector3* angularComponent,double impulseMagnitude){
	btVector3 const& c_arg_linearComponent=(btVector3 const&)(*linearComponent);
	btVector3 const& c_arg_angularComponent=(btVector3 const&)(*angularComponent);
	btScalar c_arg_impulseMagnitude=impulseMagnitude;
	c_this->internalApplyPushImpulse(c_arg_linearComponent,c_arg_angularComponent,c_arg_impulseMagnitude);
}

btVector3* bullet_btSolverBody_internalGetAngularFactor(btSolverBody* c_this){
	btVector3 const& c_out = c_this->internalGetAngularFactor();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btSolverBody_internalGetAngularVelocity(btSolverBody* c_this,btVector3* angVel){
	btVector3& c_arg_angVel=(btVector3&)(*angVel);
	c_this->internalGetAngularVelocity(c_arg_angVel);
}

btVector3* bullet_btSolverBody_internalGetDeltaAngularVelocity(btSolverBody* c_this){
	btVector3& c_out = c_this->internalGetDeltaAngularVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_internalGetDeltaLinearVelocity(btSolverBody* c_this){
	btVector3& c_out = c_this->internalGetDeltaLinearVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_internalGetInvMass(btSolverBody* c_this){
	btVector3 const& c_out = c_this->internalGetInvMass();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_internalGetPushVelocity(btSolverBody* c_this){
	btVector3& c_out = c_this->internalGetPushVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSolverBody_internalGetTurnVelocity(btSolverBody* c_this){
	btVector3& c_out = c_this->internalGetTurnVelocity();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btSolverBody_internalGetVelocityInLocalPointObsolete(btSolverBody* c_this,btVector3* rel_pos,btVector3* velocity){
	btVector3 const& c_arg_rel_pos=(btVector3 const&)(*rel_pos);
	btVector3& c_arg_velocity=(btVector3&)(*velocity);
	c_this->internalGetVelocityInLocalPointObsolete(c_arg_rel_pos,c_arg_velocity);
}

void bullet_btSolverBody_internalSetInvMass(btSolverBody* c_this,btVector3* invMass){
	btVector3 const& c_arg_invMass=(btVector3 const&)(*invMass);
	c_this->internalSetInvMass(c_arg_invMass);
}

void bullet_btSolverBody_setWorldTransform(btSolverBody* c_this,btTransform* worldTransform){
	btTransform const& c_arg_worldTransform=(btTransform const&)(*worldTransform);
	c_this->setWorldTransform(c_arg_worldTransform);
}

void bullet_btSolverBody_writebackVelocity(btSolverBody* c_this){
	c_this->writebackVelocity();
}

void bullet_btSolverBody_writebackVelocityAndTransform(btSolverBody* c_this,double timeStep,double splitImpulseTurnErp){
	btScalar c_arg_timeStep=timeStep;
	btScalar c_arg_splitImpulseTurnErp=splitImpulseTurnErp;
	c_this->writebackVelocityAndTransform(c_arg_timeStep,c_arg_splitImpulseTurnErp);
}

#ifdef __cplusplus
}
#endif
